package pro.bbs.view.service;

import com.yy.kit.collections.YYMapKits;
import com.yy.pojo.base.TUser;
import io.swagger.annotations.Api;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.Map;

/**
 * <p>
 * 用户登陆、注销相关远程调用接口
 * </p>
 *
 * @author 杨阳
 * @since 2017年10月19日
 */
@FeignClient(value = "bbs-server", fallback = TUserLoginRemoteServiceFallBack.class)
@Api(value = "用户登陆、注销相关远程调用接口", tags = {"用户登陆、注销相关远程调用接口"})
public interface TUserLoginRemoteService {

    /**
     * <p>
     * 调用远程登陆接口
     * </p>
     *
     * @param user {@link TUser} 用户实体类
     * @return {@link Map<String, Object>}
     */
    @PostMapping("/remoteUserLogin")
    Map<String, Object> remoteUserLogin(@RequestBody TUser user);

    /**
     * <p>
     * 调用远程的用户注册方法
     * </p>
     *
     * @param user {@link TUser}
     * @return {@link Map<String, Object>}
     */
    @PostMapping("/userRegister")
    Map<String, Object> userRegister(@RequestBody TUser user);
}

/**
 * <p>
 * feign使用断路器，
 * 失败回退类必须使用feign接口，TPostRemoteServiceFallBack也可以是public class，
 * 这里是图方便，直接写在一个文件中，因为一个文件只保存存在一个public 修饰的类
 * </p>
 *
 * @author 杨阳
 * @since 2017年11月3日
 */
class TUserLoginRemoteServiceFallBack implements TUserLoginRemoteService {

    @Override
    public Map<String, Object> remoteUserLogin(TUser user) {
        Map<String, Object> map = YYMapKits.createHashMap();
        map.put("success", Boolean.FALSE);
        map.put("msg", "调用登陆接口失败，请重试!");
        return map;
    }

    @Override
    public Map<String, Object> userRegister(TUser user) {
        Map<String, Object> map = YYMapKits.createHashMap();
        map.put("success", Boolean.FALSE);
        map.put("msg", "调用注册接口失败，请重试!");
        return map;
    }

}
